Skip to content

docs(qwp): document C, C++, and Rust clients 7.1.0 and 7.2.0 - #589

Merged
mtopolnik merged 5 commits into
mainfrom
mt_qwp-uuid-rust-cpp
Oct 21, 2026
Merged

mtopolnik merged 5 commits into
mainfrom
mt_qwp-uuid-rust-cpp

Conversation

@mtopolnik

@mtopolnik mtopolnik commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Documents the C, C++, and Rust client behavior that shipped in c-questdb-client 7.1.0 and 7.2.0. Split out of #516, which keeps the Python changes until the Python client 5.1.0 is released.

Changes

  • C/C++ and Rust client pages (7.1.0): UUID values cross the API in canonical RFC 4122 byte order, except the row-buffer call that takes the two 64-bit wire halves. Binary Arrow columns land as BINARY unless they claim UUID or LONG256 through arrow.uuid / questdb.column_type field metadata or a per-column override, with examples. A caution box covers the silent behavior change for code written against 7.0.0. Also documents the scope of in_doubt for low-level flushes and for Rust flush_polars_dataframe.
  • C/C++ and Rust client pages (7.2.0): a QWP/WebSocket buffer flush must fit the frame cap, the smallest of max_buf_size, the server's advertised batch size, and the sf_max_segment_bytes segment payload capacity. line_sender_buffer_size / Buffer::len() is at least the encoded frame size, so applications can flush before reaching the cap. An oversized buffer fails with batch_too_large / ErrorCode::BatchTooLarge, publishes nothing, and keeps its rows. The C/C++ error table gains a batch_too_large row, including the in_doubt check for a chunk that queued some frames before failing.
  • Store-and-forward: replay is at-least-once. A frame the server committed but did not acknowledge before a reconnect is written again; suppressing the duplicates needs table-level DEDUP UPSERT KEYS with stable row identity.
  • QWP/WebSocket wire protocol: notes how the UUID wire encoding relates to RFC 4122 order and which client calls reverse it. The sentence lists C, C++, and Rust; docs(qwp): document canonical RFC 4122 UUID byte order #516 adds Python once 5.1.0 ships.
  • Version references: the behavior-change notes name 7.1.0, the release that contains c-questdb-client#186, and the C/C++ FetchContent example pins the 7.2.0 tag.
  • Changelog: entries for the above under October 2026.

Not covered

  • 7.2.0 per-query reader timeouts (c-questdb-client#214). They need server support from feat(qwp): add per-query timeouts for queries over QWP questdb#7768, which no QuestDB release has yet; they will be documented once it ships.
  • The standalone QWP/WebSocket sender changes in 7.2.0 (BatchTooLarge replacing InvalidApiCall, effective_frame_cap()). These pages document only the pooled API.

Related

Validation

  • npm run build, which fails on broken links and anchors

🤖 Generated with Claude Code

@github-actions

github-actions Bot commented Oct 19, 2026 •

Copy link
Copy Markdown

🚀 Build success!

Latest successful preview: https://preview-589--questdb-documentation.netlify.app/docs/

Commit SHA: 61c4d79

📦 Build generates a preview & updates the link on each commit.

@mtopolnik mtopolnik changed the title docs(qwp): document the 7.1.0 UUID byte order for C, C++, and Rust docs(qwp): document C, C++, and Rust clients 7.1.0 and 7.2.0 Oct 21, 2026
@mtopolnik
mtopolnik enabled auto-merge (squash) October 21, 2026 14:14
@mtopolnik
mtopolnik disabled auto-merge October 21, 2026 14:14
@mtopolnik
mtopolnik merged commit b71a368 into main Oct 21, 2026
3 checks passed
@mtopolnik
mtopolnik deleted the mt_qwp-uuid-rust-cpp branch October 21, 2026 14:14
mtopolnik added a commit that referenced this pull request Oct 22, 2026
Documents the Python client 5.1.0 QWP changes:

- Canonical RFC 4122 byte order for UUID values in the Python API. The
QWP wire format is unchanged.
- How Arrow binary columns are identified as UUID or LONG256 through
extension metadata, field metadata, or per-column overrides, with
examples.
- Python 5.1 support for QWP-only values in `row()` and for preserving
QuestDB types when writing query results back.
- DataFrame-wide `in_doubt` status and the risk of duplicating committed
rows on retry.

The C, C++, and Rust parts of this PR, together with the corrected
store-and-forward replay guidance, moved to #589, which documents
c-questdb-client 7.1.0.

## Compatibility notes

- Code that passes QWP wire-order UUID bytes to updated client APIs will
store reversed UUIDs; these APIs now expect canonical byte order.
- Binary column width alone no longer implies UUID or LONG256. Columns
must explicitly claim their type.


Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant